package com.jxc.service.impl;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.jxc.dao.BaseDaoI;
import com.jxc.model.po.BasicArgument;
import com.jxc.model.po.Repertory;
import com.jxc.model.vo.DataGrid;
import com.jxc.model.vo.VBasicArgument;
import com.jxc.service.BasicArgumentServiceI;

@Service("basicArumentService")
public class BasicArumentServiceImpl implements BasicArgumentServiceI {

	@Autowired
	private BaseDaoI<BasicArgument> basicArgumentDao;

	@Override
	public DataGrid datagrid(VBasicArgument vBasicArgument) {
		DataGrid dg = new DataGrid();
		dg.setRows(this.changeModel(this.find(vBasicArgument)));
		return dg;
	}

	private List<VBasicArgument> changeModel(List<BasicArgument> basicArguments) {
		List<VBasicArgument> vBasicArguments = new ArrayList<VBasicArgument>();
		if (basicArguments != null && basicArguments.size() > 0) {
			for (BasicArgument basicArgument : basicArguments) {
				VBasicArgument vBasicArgument = new VBasicArgument();
				BeanUtils.copyProperties(basicArgument, vBasicArgument);
				if (basicArgument.getRepertory() != null) {
					Repertory repertory = basicArgument.getRepertory();
					vBasicArgument.setRid(repertory.getId());
					vBasicArgument.setRname(repertory.getName());
				}
				vBasicArguments.add(vBasicArgument);
			}
		}
		return vBasicArguments;
	}

	private List<BasicArgument> find(VBasicArgument vBasicArgument) {
		String hql = "from BasicArgument t where 1=1 ";

		List<Object> values = new ArrayList<Object>();
		hql = addWhere(vBasicArgument, hql, values);
		return basicArgumentDao.find(hql, values);
	}

	private String addWhere(VBasicArgument vBasicArgument, String hql,
			List<Object> values) {
		if (vBasicArgument.getId() != null) {
			hql += " and t.id = ? ";
			values.add(vBasicArgument.getId());
		}
		if (vBasicArgument.getRid() != null) {
			hql += " and t.repertory.id = ? ";
			values.add(vBasicArgument.getRid());

		}
		return hql;
	}

	@Override
	public void update(VBasicArgument vBasicArgument) {
		BasicArgument basicArgument = basicArgumentDao.get(BasicArgument.class,
				vBasicArgument.getId());
		BeanUtils.copyProperties(vBasicArgument, basicArgument,
				new String[] { "id" });
		if (vBasicArgument.getRid() != null) {
			basicArgument.setRepertory(new Repertory(vBasicArgument.getRid()));
		}
		this.basicArgumentDao.update(basicArgument);
	}

	@Override
	public BasicArgument getBasricArgumentByKey(Long rid,String key) {
		String hql = "from BasicArgument t where t.repertory.id=? and t.argKey=? ";
		List<Object> values = new ArrayList<Object>();
		values.add(rid);
		values.add(key);
		return basicArgumentDao.get(hql, values);
	}

}
